﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AudiPyme.DAL;

namespace AudiPyme.BLL
{
    public static class ControlesEmpresaNegocio
    {
        //Método que inserta los valores de los controles de una empresa en la tabla de ControlesEmpresa
        public static void InsertarControlesEmpresa(List<ControlesCheckList> ValoresControles)
        {
            int NumeroTotalControles = 133;
            ModeloContainer agenteBD = new ModeloContainer();
            for (int i = 0; i < NumeroTotalControles; i++)
            {
                int IdEmpresa = ValoresControles[i].IdEmpresa;
                int IdControl = ValoresControles[i].IdControl;
                String ValorControl = ValoresControles[i].ValorControl;
                ControlesEmpresaFactory.InsertaControlEmpresa(IdEmpresa, IdControl, ValorControl);
            }
        }

        //Método que recoge los valores de los controles de una empresa
        public static List<ControlesCheckList> RecogeControlesCheckListEmpresa(int IdEmpresa)
        {
            List<ControlesCheckList> LControlesChkList = new List<ControlesCheckList>();
            ModeloContainer agenteBD = new ModeloContainer();
            LControlesChkList = (from ControlesObj in agenteBD.ControlesEstablecer
                                 join ControlesEmp in agenteBD.ControlesEmpresaEstablecer on ControlesObj.IdControl equals ControlesEmp.IdControl
                                 where ControlesEmp.IdEmpresa == IdEmpresa
                                 select new ControlesCheckList { IdControl = ControlesObj.IdControl, IdEmpresa = ControlesEmp.IdEmpresa, ValorControl = ControlesEmp.Valor, NivelMadurez = ControlesObj.NivelMadurez }).ToList();
            return LControlesChkList;
        }

        //Método que recoge los controles de una Empresa para un informe dado y su información asociada a ella
        public static List<ControlesCheckList> RecogeControlesCheckListInforme(int IdInforme)
        {
            List<ControlesCheckList> LControlesChkList = new List<ControlesCheckList>();
            ModeloContainer agenteBD = new ModeloContainer();
            LControlesChkList = (from ControlesObj in agenteBD.ControlesEstablecer
                                 join ControlesInf in agenteBD.ControlesEmpresaInformeEstablecer on ControlesObj.IdControl equals ControlesInf.IdControl
                                 where ControlesInf.IdInforme == IdInforme
                                 select new ControlesCheckList { IdControl = ControlesObj.IdControl, IdEmpresa = ControlesInf.IdEmpresa, ValorControl = ControlesInf.ValorInforme, NivelMadurez = ControlesObj.NivelMadurez }).ToList();
            return LControlesChkList;
        }

        //Método que deserializa loas respuestas almacenadas sobre los controles para mostrarlas en la interfaz
        public static String DesSerializaRespuesta(String parametro)
        {
            switch (parametro.Trim())
            {
                case "SI":
                    return "Sí";
                case "NO":
                    return "No";
                case "PARC":
                    return "Parcialmente";
                case "N/A":
                    return "No Aplica";
                default:
                    return "Sin Valor";
            }
        }
    }
}